#include <iostream>

class Base
{};

class Derived:public Base
{};

int main()
{   
    //在基本数据类型之间转换
    //void* 和普通指针之间转换
    //非同类型指针之间不允许转换(父子指针可以相互转换,没有类型安全检查)
    // int c = 10;
    // int *a = &c;
    // int *g = static_cast<int*>(a);
    // std::cout<<b<<std::endl;

    //专门用于(有虚函数的)父子指针之间的转换
    //向上转型是安全的 向下转型是不安全的
    // Derived *d = new Derived;
    // Base*b = dynamic_cast<Derived*>(d);
    // Base *b = new  Derived;
    // Derived *d = dynamic_cast<Derived*>(b);

    //用于const和非const指针转换
    // int a = 10;
    // const int *b = &a;
    // int *c  = const_cast<int*>(b);
    // *c = 20;
    // std::cout<<a<<std::endl;

    //强制类型转换(少用)
    // int a = 10;
    // char *b = reinterpret_cast<char*>(a);
    return 0;
}